package com.gaojiawei.multiThread18_CompletableFutureTask;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 有task A和task B ，任务b需要在任务a执行完后才能执行，同时任务b 需要任务a执行完的结果 同时任务b也会返回结果
 * thenApply可以拼接异步任务，前置任务执行完之后，在执行后置任务。
 */
public class L03_ThenApply {

    private ExecutorService threadPool = Executors.newFixedThreadPool(10);

    public static void main(String[] args) {
        testThenApply();
    }

    public static void testThenApply(){
        CompletableFuture<String> taskA = CompletableFuture.supplyAsync(()->{
            System.out.println("begin a");
            System.out.println("finish a");
            return "finish a";
        });

        CompletableFuture<String> taskB = taskA.thenApply((resA)->{
            System.out.println("begin b");
            System.out.println("finish b");
            return resA + "finish b";
        });

        System.out.println(taskB.join());
    }

    //thenApplyAsync使用的不是同一个线程，但是同理
}
